$OpenBSD: patch-common_filecmp_rcs_c,v 1.1 2014/06/25 17:54:07 naddy Exp $
--- common/filecmp_rcs.c.orig	Mon Jul 18 16:32:56 2005
+++ common/filecmp_rcs.c	Wed Jun 25 16:00:27 2014
@@ -1808,7 +1808,13 @@ filecmp_rcs_delta_add(struct filecmp_args *fca, struct
 		return (false);
 
 	len = rev->num.n_len + rev->date.rd_num.n_len + rev->author.i_len;
-	len += rev->state.i_len + rev->next.n_len + hashops->length + 11;
+	len += rev->state.i_len + rev->next.n_len;
+
+	if (fca->fca_proto >= CVSYNC_PROTO(0, 25))
+		len += rev->commitid.i_len + 1;
+
+	len += hashops->length + 11; /* XXX magic? */
+
 	for (i = 0 ; i < branches->rb_count ; i++)
 		len += branches->rb_num[i].n_len + 1;
 	if (len > fca->fca_cmdmax) {
@@ -1895,6 +1901,21 @@ filecmp_rcs_delta_add(struct filecmp_args *fca, struct
 				   rev->next.n_len);
 	}
 
+	/* commitid */
+	if (fca->fca_proto >= CVSYNC_PROTO(0, 25)) {
+		cmd[0] = rev->commitid.i_len;
+		if (!mux_send(fca->fca_mux, MUX_UPDATER, cmd, 1))
+			return (false);
+		if (rev->commitid.i_len > 0) {
+			if (!mux_send(fca->fca_mux, MUX_UPDATER, rev->commitid.i_id,
+				rev->commitid.i_len)) {
+				return (false);
+			}
+			(*hashops->update)(fca->fca_hash_ctx, rev->commitid.i_id,
+			    rev->commitid.i_len);
+		}
+	}
+
 	(*hashops->final)(fca->fca_hash_ctx, cmd);
 	if (!mux_send(fca->fca_mux, MUX_UPDATER, cmd, hashops->length))
 		return (false);
@@ -1958,13 +1979,24 @@ filecmp_rcs_delta_update(struct filecmp_args *fca, str
 				   rev->next.n_len);
 	}
 
+	/* commitid */
+	if (rev->commitid.i_len > 0 && fca->fca_proto >= CVSYNC_PROTO(0, 25))
+		(*hashops->update)(fca->fca_hash_ctx, rev->commitid.i_id,
+		    rev->commitid.i_len);
+
 	(*hashops->final)(fca->fca_hash_ctx, fca->fca_hash);
 
 	if (memcmp(hash, fca->fca_hash, hashops->length) == 0)
 		return (true);
 
 	len = rev->num.n_len + rev->date.rd_num.n_len + rev->author.i_len;
-	len += rev->state.i_len + rev->next.n_len + hashops->length + 11;
+	len += rev->state.i_len + rev->next.n_len;
+
+	if (fca->fca_proto >= CVSYNC_PROTO(0, 25))
+		len += rev->commitid.i_len + 1;
+
+	len += hashops->length + 11; /* XXX magic? */
+
 	for (i = 0 ; i < branches->rb_count ; i++)
 		len += branches->rb_num[i].n_len + 1;
 	if (len > fca->fca_cmdmax)
@@ -2037,6 +2069,19 @@ filecmp_rcs_delta_update(struct filecmp_args *fca, str
 		if (!mux_send(fca->fca_mux, MUX_UPDATER, rev->next.n_str,
 			      rev->next.n_len)) {
 			return (false);
+		}
+	}
+
+	/* commitid */
+	if (fca->fca_proto >= CVSYNC_PROTO(0, 25)) {
+		cmd[0] = rev->commitid.i_len;
+		if (!mux_send(fca->fca_mux, MUX_UPDATER, cmd, 1))
+			return (false);
+		if (rev->commitid.i_len > 0) {
+			if (!mux_send(fca->fca_mux, MUX_UPDATER, rev->commitid.i_id,
+				rev->commitid.i_len)) {
+				return (false);
+			}
 		}
 	}
 
